/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.evangelion.core.daoImpl;

import com.evangelion.core.bean.FacturaAlumno;
import com.evangelion.core.bean.Seccione;
import com.evangelion.core.dao.FacturaAlumnoDao;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
import javax.persistence.Query;
import org.springframework.stereotype.Repository;

/**
 *
 * @author Kellycasma
 */
@Repository
public class FacturaAlumnoDaoImpl extends GenericDaoImpl<Serializable> implements FacturaAlumnoDao {

    @Override
    public List<FacturaAlumno> findByRangeDate(Seccione seccion, String nif, Date fechadesde, Date fechahasta, int start, int max) {
        em = getEntityManager();

        Query q = em.createQuery("SELECT f FROM FacturaAlumno f WHERE (f.alumno.nif LIKE :nif OR f.alumno.nombres LIKE :nif) AND f.fechafactura>=:fechadesde AND f.fechafactura<=:fechahasta AND f.seccion = :seccion ");

        q.setParameter("seccion", seccion);
        q.setParameter("nif", "%" + nif + "%");
        q.setParameter("fechadesde", fechadesde);
        q.setParameter("fechahasta", fechahasta);
        q.setFirstResult(start);
        q.setMaxResults(max);

        return q.getResultList();
    }

    @Override
    public List<Object[]> matriculasMensuales(Seccione seccion, Date fechadesde, Date fechahasta) {
        em = getEntityManager();

        Query q = em.createNativeQuery("select COUNT(id), MONTHNAME(fechafactura) from facturas_alumnos  WHERE fechafactura>=? AND fechafactura<=? AND id_seccion=? GROUP BY (YEAR(fechafactura)),(MONTH(fechafactura))");

        q.setParameter(1, fechadesde);
        q.setParameter(2, fechahasta);
        q.setParameter(3, seccion.getId());
        return q.getResultList();
    }

    @Override
    public List<Object[]> matriculasMensualesPermiso(Seccione seccion, Date fechadesde, Date fechahasta, String permiso) {
        em = getEntityManager();
        Query q;
        if (permiso != null) {
            q = em.createNativeQuery("select COUNT(id), MONTHNAME(fechafactura), servicio from facturas_alumnos  WHERE fechafactura>=? AND fechafactura<=? AND id_seccion=? GROUP BY (YEAR(fechafactura)),(MONTH(fechafactura)),servicio");
            q.setParameter(4, permiso);
        } else {
            q = em.createNativeQuery("select COUNT(id), MONTHNAME(fechafactura), servicio from facturas_alumnos  WHERE fechafactura>=? AND fechafactura<=? AND id_seccion=? GROUP BY (YEAR(fechafactura)),(MONTH(fechafactura)),servicio");

        }

        q.setParameter(1, fechadesde);
        q.setParameter(2, fechahasta);
        q.setParameter(3, seccion.getId());

        return q.getResultList();
    }

    @Override
    public int countPage(Seccione seccion, String valor, Date fechadesde, Date fechahasta) {
        em = getEntityManager();

        Query q = em.createQuery("SELECT  COUNT(f.id) FROM FacturaAlumno f WHERE (f.alumno.nif LIKE :nif OR f.alumno.nombres LIKE :nif) AND f.fechafactura>=:fechadesde AND f.fechafactura<=:fechahasta AND f.seccion = :seccion ");

        q.setParameter("seccion", seccion);
        q.setParameter("nif", "%" + valor + "%");
        q.setParameter("fechadesde", fechadesde);
        q.setParameter("fechahasta", fechahasta);

        return ((Number) q.getSingleResult()).intValue();
    }
}
